本篇將會講如何控制手電筒。
由於手電筒的燈是用相機的閃光燈,所以我們需要使用到相機的參數
第一步:添加權限
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
第二步:創建 button 來開關手電筒
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/open"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="264dp"
android:text="開手電筒"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/close"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:text="關手電筒"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/open" />
</androidx.constraintlayout.widget.ConstraintLayout>
第三步:呼叫相機、創建的button並設定功能
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
open =findViewById(R.id.open);
close = findViewById(R.id.close);
manager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);
open.setOnClickListener(this);
close.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch(view.getId()) {
case R.id.open:
lightopen();
break;
case R.id.close:
lightclose();
break;
}
}
private void lightopen(){
lightSwitch(false);
}
private void lightclose(){
lightSwitch(true);
}
寫入在復程式裡的lightSwitch的方法
private void lightSwitch(final boolean lightStatus) {
if (lightStatus) { // 關手電筒
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//當版本大於等於23時會執行
try {
manager.setTorchMode("0", false);
} catch (Exception e) {
e.printStackTrace();
}
} else {
//如果版本沒有大於23就會釋放相機
if (m_Camera != null) {
m_Camera.stopPreview();
m_Camera.release();
m_Camera = null;
}
}
} else { // 開手電筒
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//當版本大於等於23時會執行
try {
manager.setTorchMode("0", true);
} catch (Exception e) {
e.printStackTrace();
}
} else {
final PackageManager pm = getPackageManager();
final FeatureInfo[] features = pm.getSystemAvailableFeatures();
for (final FeatureInfo f : features) {
if (PackageManager.FEATURE_CAMERA_FLASH.equals(f.name)) {
//看是否支援閃光燈
if (null == m_Camera) {
m_Camera = Camera.open();
}
final Camera.Parameters parameters = m_Camera.getParameters();
parameters.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
m_Camera.setParameters(parameters);
m_Camera.startPreview();
}
}
}
}
}
這樣手電筒就可以開了。
注意!!!!
這個方式的相機在 import 時會發現已經被畫掉了,這表示已經被android studio 棄用了但還是可以使用。